package androids.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import androids.excepcion.DAOExcepcion;
import androids.modelo.Categoria;
import androids.modelo.Producto;
import androids.modelo.Proveedor;
import androids.util.ConexionBD;

public class ProductoDAO extends BaseDAO {

	public void insertar(Producto vo) throws DAOExcepcion {
		System.out.println("ProductoDAO: insertar(Producto vo)");
		String query = "INSERT INTO producto(id_categoria, id_proveedor, nombre, stock, precio, numserie) VALUES (?,?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getIdCategoria());
			stmt.setString(2, vo.getIdProveedor());
			stmt.setString(3, vo.getNombre());
			stmt.setString(4, vo.getStock());
			stmt.setString(5, vo.getPrecio());
			stmt.setString(6, vo.getNumSerie());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar el producto");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	
	}}
	/*
	public void actualizar(Producto vo) throws DAOExcepcion {
		System.out.println("ProductoDAO: actualizar(Producto vo)");
		String query = "update producto set id_categoria=?, id_proveedor=?, nombre=?, stock=?, precio=?, numserie=? where id_producto=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getMyCategoria().getIdCategoria());
			stmt.setInt(2, vo.getMyProveedor().getIdProveedor());
			stmt.setString(3, vo.getNombre());
			stmt.setInt(4, vo.getStock());
			stmt.setDouble(5, vo.getPrecio());
			stmt.setInt(6, vo.getNumSerie());
			stmt.setInt(7, vo.getIdProducto());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar el producto");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	public void eliminar(Integer idProducto) throws DAOExcepcion {
		System.out.println("CProductoDAO: eliminar(Integer idProducto)");
		String query = "DELETE FROM producto WHERE id_producto=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idProducto);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar el producto");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	public Producto obtener(Integer IdProducto) throws DAOExcepcion {
		System.out.println("ProductoDAO: obtener(Integer IdProducto)");
		Producto vo = new Producto();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select id_producto, id_categoria, id_proveedor, nombre, stock, precio, numserie from producto where id_producto=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, IdProducto);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setIdProducto(rs.getInt(1));
				Categoria cat = new Categoria();
				cat.setIdCategoria(rs.getInt(2));
				vo.setMyCategoria(cat);
				Proveedor pro = new Proveedor();
				pro.setIdProveedor(rs.getInt(3));
				vo.setMyProveedor(pro);
				vo.setNombre(rs.getString(4));
				vo.setStock(rs.getInt(5));
				vo.setPrecio(rs.getDouble(6));
				vo.setNumSerie(rs.getInt(7));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
		
	
	public Collection<Producto> listar() throws DAOExcepcion {
		System.out.println("ProductoDAO: listar()");
		Collection<Producto> c = new ArrayList<Producto>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "SELECT id_producto, id_categoria, id_proveedor, nombre, stock, precio, numserie from producto";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Producto vo = new Producto();		
				vo.setIdProducto(rs.getInt("id_producto"));
				Categoria cat = new Categoria();
				cat.setIdCategoria(rs.getInt("id_categoria"));
				vo.setMyCategoria(cat);
				Proveedor pro = new Proveedor();
				pro.setIdProveedor(rs.getInt("id_proveedor"));
				vo.setMyProveedor(pro);
				vo.setNombre(rs.getString("nombre"));
				vo.setStock(rs.getInt("stock"));
				vo.setPrecio(rs.getDouble("precio"));
				vo.setNumSerie(rs.getInt("numserie"));
				c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
	
	public Collection<Producto> buscarPorIdProducto(Integer idproducto) throws DAOExcepcion {
	System.out.println("ProductoDAO: buscarIdProducto(Integer idproducto)");
	String query = "SELECT id_producto, id_categoria, id_proveedor, nombre, stock, precio, numserie FROM producto WHERE id_producto like ?";
	Collection<Producto> lista = new ArrayList<Producto>();
	Connection con = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	try {
		con = ConexionBD.obtenerConexion();
		stmt = con.prepareStatement(query);
		stmt.setString(1, "%" + idproducto + "%");
		rs = stmt.executeQuery();
		while (rs.next()) {
			Producto vo = new Producto();
			vo.setIdProducto(rs.getInt("id_producto"));
			Categoria cat = new Categoria();
			cat.setIdCategoria(rs.getInt("id_categoria"));
			vo.setMyCategoria(cat);
			Proveedor pro = new Proveedor();
			pro.setIdProveedor(rs.getInt("id_proveedor"));
			vo.setMyProveedor(pro);
			vo.setNombre(rs.getString("nombre"));
			vo.setStock(rs.getInt("stock"));
			vo.setPrecio(rs.getDouble("precio"));
			vo.setNumSerie(rs.getInt("numserie"));
			lista.add(vo);
		}
	} catch (SQLException e) {
		System.err.println(e.getMessage());
		throw new DAOExcepcion(e.getMessage());
	} finally {
		this.cerrarResultSet(rs);
		this.cerrarStatement(stmt);
		this.cerrarConexion(con);
	}
	return lista;
}
		
	}
	*/